/**
 * 测试文档解析流程
 * 
 * 这个脚本用于测试整个文档解析流程，包括处理通义千问返回的HTML格式响应
 */
require('dotenv').config();
const fs = require('fs');
const path = require('path');
const DocumentParser = require('./src/services/documentParser');

// 创建一个简单的测试文档
const testDocument = `
# 测试文档

## 第一章 引言

这是引言部分的内容。这里介绍了文档的背景和目的。
这是更多的引言内容。

## 第二章 研究背景

这是研究背景部分的内容。这里介绍了相关的研究工作。
这是更多的研究背景内容。

## 第三章 方法论

这是方法论部分的内容。这里介绍了研究方法和实验设计。
这是更多的方法论内容。

## 第四章 结果分析

这是结果分析部分的内容。这里介绍了实验结果和分析。
这是更多的结果分析内容。

## 第五章 结论

这是结论部分的内容。这里总结了研究成果和未来工作。
这是更多的结论内容。
`;

// 模拟通义千问返回的HTML响应
const mockHtmlResponse = `<!DOCTYPE html>
<html>
<head>
  <title>通义千问响应</title>
  <meta charset="utf-8">
</head>
<body>
  <div class="response-container">
    <h1>文档分析结果</h1>
    <p>根据您提供的文档内容，我已经分析出以下结构：</p>
    
    <pre>
    [
      {
        "title": "第一章 引言",
        "startIndex": 20,
        "endIndex": 120
      },
      {
        "title": "第二章 研究背景",
        "startIndex": 121,
        "endIndex": 221
      },
      {
        "title": "第三章 方法论",
        "startIndex": 222,
        "endIndex": 322
      },
      {
        "title": "第四章 结果分析",
        "startIndex": 323,
        "endIndex": 423
      },
      {
        "title": "第五章 结论",
        "startIndex": 424,
        "endIndex": 524
      }
    ]
    </pre>
    
    <p>如果您需要更详细的分析，请提供完整的文档内容。</p>
  </div>
</body>
</html>`;

// 模拟AiModelService
class MockAiModelService {
  static async parseWithAI(content, options) {
    console.log('模拟AI模型服务调用...');
    console.log(`任务: ${options.task}`);
    console.log(`内容长度: ${content.length}`);
    
    // 模拟延迟
    await new Promise(resolve => setTimeout(resolve, 500));
    
    // 返回模拟的HTML响应
    return {
      success: true,
      result: mockHtmlResponse
    };
  }
}

// 替换DocumentParser中的AiModelService
DocumentParser.AiModelService = MockAiModelService;

// 测试文档解析
async function testDocumentParsing() {
  console.log('=== 测试文档解析流程 ===\n');
  
  // 保存测试文档到临时文件
  const tempFilePath = path.join(__dirname, 'temp-test-doc.txt');
  fs.writeFileSync(tempFilePath, testDocument);
  console.log(`创建临时测试文档: ${tempFilePath}`);
  
  try {
    // 解析文档
    console.log('开始解析文档...');
    const result = await DocumentParser.parseDocument(tempFilePath, 'txt');
    
    console.log('\n✅ 文档解析成功!');
    console.log('解析结果:');
    console.log(JSON.stringify(result, null, 2));
    
    // 测试提取章节内容
    if (result.structure && result.structure.length > 0) {
      console.log('\n测试提取章节内容...');
      const firstChapter = result.structure[0];
      const chapterContent = DocumentParser.extractChapterContent(result.content, firstChapter);
      
      console.log(`章节标题: ${firstChapter.title}`);
      console.log(`章节内容 (前100字符): ${chapterContent.substring(0, 100)}...`);
    }
  } catch (error) {
    console.log('\n❌ 文档解析失败!');
    console.error(error);
  } finally {
    // 清理临时文件
    if (fs.existsSync(tempFilePath)) {
      fs.unlinkSync(tempFilePath);
      console.log(`\n删除临时测试文档: ${tempFilePath}`);
    }
  }
  
  console.log('\n=== 测试完成 ===');
}

// 运行测试
testDocumentParsing(); 